#ifndef SERVERUI_H
#define SERVERUI_H

#include <QMainWindow>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QSpinBox>
#include <QCheckBox>
#include <QComboBox>
#include <QGroupBox>
#include <QTextEdit>
#include <QLineEdit>
#include <QStatusBar>
#include <QTimer>
#include <QListWidget>
#include <QTabWidget>
#include <QCloseEvent>
#include <QMessageBox>

#include "server.h"
#include "../logging/logger.h"

class ServerUI : public QMainWindow
{
    Q_OBJECT

public:
    explicit ServerUI(QWidget *parent = nullptr);
    ~ServerUI();

protected:
    void closeEvent(QCloseEvent *event) override;

private slots:
    // 服务器控制槽
    void onStartButtonClicked();
    void onStopButtonClicked();
    void onServerStatusChanged(bool running);
    
    // 设置变更槽
    void onFrameRateChanged(int fps);
    void onQualityChanged(int quality);
    void onDiffEncodingToggled(bool enabled);
    void onRemoteControlToggled(bool enabled);
    void onPortChanged(int port);
    void onLANDiscoveryToggled(bool enabled);
    void onServerNameChanged();
    
    // 客户端连接槽
    void onClientConnected(const QString &clientId, const QString &clientAddress);
    void onClientDisconnected(const QString &clientId);
    void onDisconnectClientClicked();
    
    // 远程控制事件槽
    void onMouseEventReceived(const QString &clientId, int x, int y, int button, bool pressed);
    void onKeyboardEventReceived(const QString &clientId, int key, bool pressed);
    
    // 错误处理槽
    void onErrorOccurred(const QString &errorMsg);
    
    // 日志更新槽
    void updateLog();

private:
    // UI组件
    QWidget *centralWidget;
    QVBoxLayout *mainLayout;
    
    // 顶部控制面板
    QWidget *controlPanel;
    QHBoxLayout *controlLayout;
    QPushButton *startButton;
    QPushButton *stopButton;
    QLabel *statusLabel;
    
    // 设置组
    QGroupBox *settingsGroup;
    QVBoxLayout *settingsLayout;
    
    // 端口设置
    QHBoxLayout *portLayout;
    QLabel *portLabel;
    QSpinBox *portSpinBox;
    
    // 局域网发现设置
    QHBoxLayout *lanLayout;
    QCheckBox *lanDiscoveryCheckBox;
    QLabel *serverNameLabel;
    QLineEdit *serverNameEdit;
    
    // 捕获设置
    QHBoxLayout *captureLayout;
    QLabel *frameRateLabel;
    QSpinBox *frameRateSpinBox;
    QLabel *qualityLabel;
    QSpinBox *qualitySpinBox;
    QCheckBox *diffEncodingCheckBox;
    
    // 控制设置
    QHBoxLayout *controlSettingsLayout;
    QCheckBox *remoteControlCheckBox;
    
    // 选项卡组件
    QTabWidget *tabWidget;
    
    // 客户端选项卡
    QWidget *clientsTab;
    QVBoxLayout *clientsLayout;
    QListWidget *clientListWidget;
    QPushButton *disconnectClientButton;
    
    // 日志选项卡
    QWidget *logTab;
    QVBoxLayout *logLayout;
    QTextEdit *logTextEdit;
    
    // 服务器对象
    Server *server;
    
    // 日志定时器
    QTimer *logUpdateTimer;
    
    // 初始化UI
    void setupUi();
    
    // 加载和保存设置
    void loadSettings();
    void saveSettings();
};

#endif // SERVERUI_H 